package com.xiaomi.infra.galaxy.fds.android.util;
import java.util.Date;
import java.util.Map;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpHead;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.methods.HttpUriRequest;
import com.xiaomi.infra.galaxy.fds.android.auth.GalaxyFDSCredential;
import com.xiaomi.infra.galaxy.fds.android.exception.GalaxyFDSClientException;
import com.xiaomi.infra.galaxy.fds.android.model.HttpHeaders;
import com.xiaomi.infra.galaxy.fds.model.HttpMethod;
public class RequestFactory {
public static HttpUriRequest createRequest(String uri,
GalaxyFDSCredential credential, HttpMethod method,
Map<String, String> headers) throws GalaxyFDSClientException {
uri = credential.addParam(uri);
HttpRequestBase request;
switch(method) {
case GET:
request = new HttpGet(uri);
break;
case PUT:
request = new HttpPut(uri);
break;
case POST:
request = new HttpPost(uri);
break;
case DELETE:
request = new HttpDelete(uri);
break;
case HEAD:
request = new HttpHead(uri);
break;
default:
request = null;
break;
}
if (request != null) {
if (headers != null) {
// Should not set content length here, otherwise the fucking apache
// library will throw an exception
headers.remove(HttpHeaders.CONTENT_LENGTH);
headers.remove(HttpHeaders.CONTENT_LENGTH.toLowerCase());
for (Map.Entry<String, String> header : headers.entrySet()) {
request.addHeader(header.getKey(), header.getValue());
}
}
// Add date header
request.addHeader(HttpHeaders.DATE, Util.formatDateString(new Date()));
credential.addHeader(request);
}
return request;
}
}